package com.cn.yugan.Engine.Beans;


import com.cn.yugan.Engine.Json.CommentItemJsonObj;

import java.util.LinkedList;

/**
 * 评论楼
 *
 * @author chengc
 * @ClassName: CommentFloor
 * @Description: 评论楼, 维护一个链表. 0表示顶楼,也是被回复的楼层,size-1表示底楼,是最新的回复.
 * 并且维护一个数字,表示是否有重复回复的楼层,取最靠近底楼的重复回复楼层
 * @date 2016-7-19 上午11:17:16
 */
public class CommentFloor {
    private LinkedList<CommentItemJsonObj> list = new LinkedList<CommentItemJsonObj>();
    /**
     * 第几层是重复的楼-或者说这串有几层是正常显示的
     */
    public int repeatIndex = 0;
    private String repeatStrId;
    /**
     * 隐藏重复楼层
     */
    public boolean flagHidenRepeat = true;

    /**
     * 添加更高的一层楼(被回复的)
     *
     * @param item
     * @author chengc
     */
    public void addHightFloor(CommentItemJsonObj item) {
        // item.floorNum = list.size();
        list.addFirst(item);
        boolean flag = item.setShowed();
        if (repeatIndex == 0 && flag == false && list.size() > 1) {
            // 如果记录过了重复楼层,就不用管更高层的重复楼层了
            // 如果不是第一次显示-那么说明已经有楼层显示过了,记录下当前为重复楼层
            repeatIndex = list.size();
            System.out.println("重复楼层:" + repeatIndex);
            repeatStrId = "" + item.cid;
            if (repeatIndex > 1) {
                list.get(1).flagShowHiddenBtn = true;
            }
        }

    }

    /**
     * 获取本楼最高(最早)的一层发言
     *
     * @return
     * @author chengc
     */
    public CommentItemJsonObj getHightFloor() {
        return list.getFirst();
    }

    /**
     * 根据list的index获取本楼从上往下数第N个回复(从0开始)如果不是本楼的是下一栋楼的,就回null
     *
     * @return
     * @author chengc
     */
    public CommentItemJsonObj getFloor(int index) {
        if (repeatIndex == 0 || flagHidenRepeat == false) {
            if (index >= list.size()) {
                return null;
            } else {
                return list.get(index);
            }
        } else {
            if (index >= repeatIndex) {
                return null;
            } else {
                return list.get(index + (list.size() - repeatIndex));
            }
        }
    }

    /**
     * 根据list的index获取对应显示的回复的楼层显示的总层数.如果不是本楼的就回0
     *
     * @return
     * @author chengc
     */
    public int getFloorSum(int index) {
        if (repeatIndex == 0 || flagHidenRepeat == false) {
            if (index >= list.size()) {
                return 0;
            } else {
                return list.size();
            }
        } else {
            if (index >= repeatIndex) {
                return 0;
            } else {
                return repeatIndex;
            }
        }
    }

    /**
     * 获取当前楼层当前显示的回复条数
     *
     * @return
     * @author chengc
     */
    public int getCurShowSize() {
        int showSize = 0;
        if (repeatIndex == 0 || flagHidenRepeat == false) {
            showSize = list.size();
        } else {
            showSize = repeatIndex;
        }
        // System.out.println("当前楼总楼层数:" + showSize);
        return showSize;
    }

    public LinkedList<CommentItemJsonObj> getList() {
        return list;
    }

    /**
     * 获取当前楼层隐藏了多少层
     *
     * @return
     * @author chengc
     */
    public int getHideSum() {
        return (list.size() - repeatIndex) + 1;
    }
    // /**
    // * 计算每层楼的楼层信息(每层楼对应的楼层号以及隐藏了多少条重复信息)
    // *
    // * @author chengc
    // */
    // public void setFloorNums() {
    // for (int i = 0; i < list.size(); i++) {
    // CommentItemJsonObj item = list.get(i);
    // item.floorNum = list.size() - i;
    // if (item.flagShowHiddenBtn == true) {
    // item.hiddenFloorNum = i;
    // }
    // }
    // }
}
